package com.sugon.dao;

import com.sugon.entity.DeviceInfoEntity;
import com.sugon.entity.FixedAssets;
import com.sugon.modules.analyse.model.vo.DeviceVO;
import com.sugon.modules.kpi.model.dto.KpiDeviceDTO;
import com.sugon.modules.sys.model.vo.DeviceOrganizationVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 设备信息Dao
 *
 * @author sugon
 * @date 2019-07-15 08:37:25
 */
public interface DeviceInfoDao extends BaseDao<DeviceInfoEntity> {

    /**
     * 根据固资编码查询具体的固资信息
     *
     * @param firmNo
     * @return
     */
    List<FixedAssets> queryByFirmNo(@Param("firmNo") String firmNo);

    /**
     * 获取所有设备列表
     *
     * @return
     */
    List<Map<String, Object>> deviceInfoAll();

    /**
     * 根据设备组织ID获取已关联的设备
     *
     * @param deptCode 设备组织ID
     * @return
     */
    @Select("SELECT * FROM device_info WHERE dept_code = #{deptCode}")
    List<DeviceInfoEntity> queryByDeptCode(@Param("deptCode") String deptCode);

    /**
     * 根据设备编码获取设备详情
     *
     * @param devCode
     * @return
     */
    DeviceInfoEntity getInfoByDevCode(@Param("devCode") String devCode);

    /**
     * 根据设备的低层设备码获取设备详情
     *
     * @param devLastCode 低层设备码
     * @return
     */
    DeviceInfoEntity getInfoByDevLastCode(@Param("devLastCode") String devLastCode);

    /**
     * 根据用户ID获取设备列表
     *
     * @param userid 用户ID
     * @param type   设备列表
     * @return
     */
    List<Map<String, Object>> getAllList(@Param("userid") String userid, @Param("type") String type);

    /**
     * 批量更新设备状态
     *
     * @param ids
     * @return
     */
    int updateStatus(Object[] ids);

    /**
     * 更新设备View
     *
     * @param id
     * @return
     */
    int updateView(String id);

    /**
     * 根据设备ID列表获取设备列表
     *
     * @param ids
     * @return
     */
    List<DeviceInfoEntity> getDevInfo(Object[] ids);

    /**
     * 批量更新设备列表
     *
     * @param list
     * @return
     */
    int batchUpdate(List<DeviceInfoEntity> list);

    /**
     * 根据设备编码更新设备状态
     *
     * @param status 设备状态
     * @param code   设备编码
     * @return
     */
    int updateStatusByCode(@Param("status") Integer status, @Param("code") String code);

    /**
     * 校验设备状态
     *
     * @param id
     * @return
     */
    int check(String id);

    /**
     * 所有权限查看
     *
     * @param map
     * @return
     */
    List<DeviceInfoEntity> queryList2(Map<String, Object> map);

    /**
     * 所有权限查看
     *
     * @param int
     * @return
     */
    int queryTotal2(Map<String, Object> map);

    /**
     * 根据设备大类ID获取当前设备大类下的最大设备编码
     *
     * @param typeB 设备大类ID
     * @return
     */
    String queryMaxCode(String typeB);

    /**
     * 加载设备列表
     *
     * @param deptId
     * @return
     */
    List<Map<String, Object>> loadDevList(@Param("deptId") String deptId);

    /**
     * 查询关联到指定工序号下的设备列表
     *
     * @param deptCode 设备组织编码ID
     * @return
     */
    List<DeviceVO> queryStationDev(@Param("deptCode") String deptCode);

    /**
     * 查看 已/未 编制计划的设备列表
     */
    List<DeviceInfoEntity> listPlanRelated(Map<String, Object> map);

    /**
     * 查看 已/未 编制计划的设备列表 总数
     */
    int listPlanRelatedTotal(Map<String, Object> map);

    /**
     * 加载设备组织信息，用处不多
     *
     * @return
     */
    List<DeviceOrganizationVO> loadDeviceOrganization();

    /**
     * 根据设备组织关键字获取设备ID列表
     * 组织关键字包括：设备ID、车间ID、产线编码、工序编码
     *
     * @param key
     * @return
     */
    List<KpiDeviceDTO> listAll(@Param("key") String key);

    /**
     * 查询需要进行维护的空压设备列表：类型空压设备 + 当前设备运行次数得大于下次保养次数
     *
     * @return
     */
    @Select("select * from device_info WHERE dev_type_s = '400303' AND current_life_span >= maintenance_life_span")
    List<DeviceInfoEntity> listKYMaintenance();

}
